package primalgorithms.string;

import java.util.HashMap;
import java.util.HashSet;

public class _03FirstUniqChar {
    public static int firstUniqChar(String s) {
        if(s == null){
            return -1;
        }
        int len = s.length();
        if(len < 2){
            return 0;
        }
        //依次遍历字符串
        /**
         * 该算法有问题
         * 因为如果不在第一个if中删除后续重复字符的话，该算法无法区分后续字符在之前是否已经重复
         * 如果删除了后续重复字符的话，该算法无法返回正确下标
         *
            for (int i = 0;i < len;i++){
                for (int j = i+1;j < len;j++){
                    if(s.charAt(i) == s.charAt(j)){
                        StringBuilder newStr = new StringBuilder(s);
                        newStr.delete(j,j+1);
                        len--;
                        s = newStr.toString();
                        break;
                    }
                    if(j == len-1){
                        if(s.charAt(j) != s.charAt(i)){
                            return i;
                        }
                    }
                }
            }
        */
        HashMap<Character,Integer> hashSet = new HashMap<>(len);
        for (int i = 0;i < len;i++){
            hashSet.put(s.charAt(i), hashSet.getOrDefault(s.charAt(i),0)+1);
        }
        for (int i = 0;i < len;i++){
            if(hashSet.get(s.charAt(i)) == 1){
                return i;
            }
        }
        return -1;
    }
}
